import { EventType } from "../enum/GameEnum";

const {ccclass, property} = cc._decorator;

@ccclass
/**
 * 自定义事件类
 */
export default class GameEvent extends cc.Component {

	private static _ins:GameEvent;
    private static _node: cc.Node;
	public static get ins():GameEvent
	{
        if(!this._ins)
        {   
            this._ins = new GameEvent();
            this._node = new cc.Node();
            return this._ins;
        }
        return this._ins;
	}

    // onLoad () {}

    start () 
    {

    }

    // update (dt) {}

    /**
     * @param _eventName 事件名
     * @param _obj 携带参数
     * @param _type :发送类型
     */
    public sendEvent(_eventName:any, _obj:Object = {},_type:number = EventType.Emit):void
	{   
        if(_type == EventType.Emit)
        {
            GameEvent._node.emit(_eventName, _obj);
        }
        else if(_type == EventType.Dispatch)
        {
            GameEvent._node.dispatchEvent(_eventName);
        }
	}

    /**
     * @param eventName 事件名
     * @param listener 事件回调
     * @param _type 发送类型
     */
	public addEvent(_eventName:string, _listener:Function):void
	{   
        GameEvent._node.on(_eventName, _listener);
    }
    
    /**
     * @param eventName 事件名
     * @param listener 事件回调
     * @param _type 发送类型
     */
	public removeEvent(_eventName:string, _listener:Function):void
	{   
        GameEvent._node.off(_eventName, _listener);
	}
}
